package kr.co.bettersoft.waitnumberstorem.activity;

import java.util.List;
import java.util.Locale;

import kr.co.bettersoft.waitnumberstorem.activity.R;
import kr.co.bettersoft.waitnumberstorem.common.CommonConstant;
import kr.co.bettersoft.waitnumberstorem.fragment.FragmentHome;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Window;
import android.widget.Toast;
/**
 * IntroActivity
 * 
 * 인트로 액티비티
 * 
 * 별도 처리 없이 로그인 화면으로 이동한다.
 * 추후 로딩 화면 구현시 인트로 화면을 배경으로 깔고 2초간 대기 후 로그인 화면으로 이동시키도록 한다.
 * 
 */
public class IntroActivity extends Activity {
	///////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	public String TAG = "IntroActivity";

	SharedPreferences sharedPrefCustom;	// 공용 프립스	

	// 실행중인지 확인
	RunningAppProcessInfo runningappprocessinfo = new RunningAppProcessInfo();
	public static int count = 0;

	// 자동 로그인 관련
	Boolean autoLoginChecked = false;
	String autoLoginId = "";

	// Locale
	Locale systemLocale = null ;
	String strCountry = "" ;				// 국가 코드

	Intent intent;

	///////////////////////////////////////////////////////////////////////////////////////////////////
	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			try{
				Bundle b = msg.getData();		
				if(b.getInt("banOtherCountry")==1){					 //  
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant.alertTitle)							
					.setMessage("Sorry, This App can be excuted only in Korea.")
					.setIcon(R.drawable.ic_dialog_img)		 
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int whichButton) {
							finish();		// 확인 누르면 종료 
						}})
						.setNegativeButton("", null).show();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};
	///////////////////////////////////////////////////////////////////////////////////////////////////

	@Override
	public void onCreate(Bundle savedInstanceState) {
		Log.w(TAG, "IntroPage onCreate");
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		setContentView(R.layout.intro_activity);

		// 통신 체크
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		boolean isWifiAvail = ni.isAvailable();
		boolean isWifiConn = ni.isConnected();
		ni = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
		boolean isMobileAvail = ni.isAvailable();
		boolean isMobileConn = ni.isConnected();
		String status = "WiFi Avail = " + isWifiAvail + "// WiFi Conn = "
		+ isWifiConn + "// Mobile // Avail = " + isMobileAvail
		+ "// Conn = " + isMobileConn;
		Log.d(TAG,"status:"+status);

		//사용자 지역
		systemLocale = getResources().getConfiguration().locale;
		strCountry = systemLocale.getCountry();
		Log.d(TAG,"strCountry:"+strCountry);

		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

		count = 0;		// 버그 수정용 초기화

		// 결과는 true 가 나오며, 주 목적은 이미 실행중인지 확인하는 것이다. // 실행중인지 확인한다.
		isRunningProcess(this, CommonConstant.packageNames);		

		// 중복 실행을 방지한다.
		if(count==1){		// 최초 실행 	

			// 시작. 검사를 통해 다음 진로 결정.
			new Thread(
					new Runnable(){
						public void run(){
							try{
								Thread.sleep(2000);		// 초기 로딩 시간. 2초간 인트로 화면 보여줌

//								// 외국인을 걸러낸다. 
//								if(!(strCountry.equalsIgnoreCase("KR"))){	// 국적이 한국이 아님 - 사용 불가.  (국가코드는 사용자 단말기의 언어 설정을 따름) -- 종료 시킴.
//									banOtherCountry();
//								}else{		// 한국인.
									// 동의 여부 체크하여 진행 
									if(checkUserAgreed()){	// 이전에 동의한 경우 : 다음 프로세스 진행. 
										Log.d(TAG,"agreed checked");
										// 무조건 로그인 화면으로 이동.
										Intent i = new Intent(returnThis(), LoginActivity.class);
										startActivity(i);
										finish();
									}else{			// 이전에 동의 하지 않은 경우 : 동의를 받는다. 사용자 동의 -> 전번인증 -> 다음 단계 는 인트로. MainActivity
										Log.d(TAG,"go for certi step1");
										intent = new Intent(IntroActivity.this, CertificationStoreMStep1.class);
										startActivity(intent);
										finish();
									}
//								}
							}catch(InterruptedException ie){
								ie.printStackTrace();
								finish();
							}
						}
					}
			).start();
			// 중복 실행 처리	
		}else{				// 이미 실행중.  - 추가적인 창만 그 위에 띄우도록 함.
			count = count -1;
			if(count<0){
				count = 0;
			}
			finish();
		}

	
	}






	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 자체 메소드

	public Context returnThis(){
		return this;
	}

	public void banOtherCountry(){
		if(returnThis()!=null){
			runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("banOtherCountry", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}
	
//	/**
//	 * pref 에서 자동 로그인 설정 정보를 가져온다.
//	 * @return
//	 */
//	public Boolean checkAutoLogin(){
//		autoLoginChecked = sharedPrefCustom.getBoolean("autoLoginChecked", false);
//		autoLoginId = sharedPrefCustom.getString("autoLoginId", "");
//		return autoLoginChecked;
//	}

	/**
	 * isRunningProcess
	 *  중복 실행 방지를 위해 카운팅 체크를 한다.
	 *    항상 기동중이기때문에 결과는 true. 
	 * @param context
	 * @param packageName
	 * @return isRunning
	 */
	public static boolean isRunningProcess(Context context, String packageName) {
		boolean isRunning = false;
		ActivityManager actMng = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);   
		List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
		for(RunningAppProcessInfo rap : list)
		{
			//    		Log.e("Log","rap.processName:"+rap.processName+"/packageName:"+packageName);
			if(rap.processName.equals(packageName))
			{
				//    			Log.d("Log","packageName=packageName/"+packageName);
				isRunning = true;
				count= count+1;		// 실행중인 수 (중복 실행 방지 용)
				Log.d("Log","count:"+count);
				break;
			}
		}
		return isRunning;
	}


	// 이전에 동의한 적이 있는지 여부를 확인한다.(인증 후라서 동의정보 및 전번까지 저장되있으므로 인증 필요 없음. 전번 저장 되어있음.)
	public Boolean checkUserAgreed(){
		String agreedYN = sharedPrefCustom.getString("agreedYN", "N");		// 동의 했는지 여부
		if(agreedYN.equals("Y")){		// 이전에 동의한 경우
			Log.d(TAG,"already agree");
			return true;	// real
		}else{							// 이전에 동의 안한 경우
			Log.d(TAG,"did not agree");
			return false;
		}
	}
}
